package tests;

import common.Utils;
import org.apache.commons.lang3.exception.ExceptionContext;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class DetailPage extends Utils {
    //继承父类的 url
    //注意，这里的 url 必须是有效的博客ID，若博客ID失效，则会导致当前类下面的所有测试用例执行失败
    public static String url = DetailUrl;
    public DetailPage() {
        //先获取一个有效的 blogId
        super(url);
        System.out.println("DetailUrl : " + url);
    }

    public void checkBlogDetail() throws InterruptedException {
        //标题
        Thread.sleep(1000);
        String titleText = driver.findElement(By.cssSelector("body > div.container > div.right > div > div.title")).getText();

        //时间
        String timeText = driver.findElement(By.cssSelector("body > div.container > div.right > div > div.date")).getText();

        //内容 —— 可能是动态元素
        //若是动态ID，则不能直接复制其ID，需要通过父类标签引用到子类标签
//        String contentText = driver.findElement(By.cssSelector("#h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2")).getText();
        String contentText = driver.findElement(By.cssSelector("#detail>h2")).getText();

        //编辑按钮
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)"));

        //删除按钮
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)"));

        System.out.println("titleText : " + titleText);
        //判断不能为空
        assert !titleText.isEmpty();
        assert !timeText.isEmpty();
        assert !contentText.isEmpty();
    }

    /*
    * 博客详情页 —— 编辑功能
    * */
    public void checkDetailEdit(){
        //通过博客详情页进入到编辑页面
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")).click();
        //检查跳转是否正确
        //检查 url；检查更新文章按钮
        String upDateUrl = driver.getCurrentUrl();
        String upDateText = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        assert upDateUrl.contains("blog_update");
        assert upDateText.equals("更新文章");

        //点击更新按钮，跳转回到博客详情页
        driver.findElement(By.cssSelector("#submit")).click();

        //显示等待
        //判断到当前 url 包含 blog_list 就继续运行
        wait.until(ExpectedConditions.urlContains("blog_list"));
    }

    /*
     * 博客详情页 —— 删除功能
     * */
    public void checkDetailDel_Dismiss(){
        //编辑之后回到的是博客列表页，要手动跳转到博客详情页
        driver.get(url);
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();

        //点击删除之后会出现弹窗
        //需要等待弹窗 —— 显示等待
        wait.until(ExpectedConditions.alertIsPresent());//等待弹窗

        //处理弹窗
        Alert alert = driver.switchTo().alert();

        //点击取消按钮，弹窗消失，回到当前页
        alert.dismiss();

        assert (driver.getCurrentUrl()).equals(url);
    }

    public void checkDetailDel_Accept(){
        //编辑之后回到的是博客列表页，要手动跳转到博客详情页
        driver.get(url);
        driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")).click();

        //点击删除之后会出现弹窗
        //需要等待弹窗 —— 显示等待
        wait.until(ExpectedConditions.alertIsPresent());//等待弹窗

        //处理弹窗
        Alert alert = driver.switchTo().alert();

        //点击确定按钮，回到列表页
        alert.accept();

        //检查是否回到列表页
        wait.until(ExpectedConditions.urlContains("blog_list"));
    }

}
